package main

import "fmt"

/*
	反转字符串中的元音字母
编写一个函数，以字符串作为输入，反转该字符串中的元音字母。

示例 1：
输入："hello"
输出："holle"

示例 2：
输入："leetcode"
输出："leotcede"
*/

// 解法一 使用map来保存元音字母
func reverseVowels1(s string) string {
	arr := []byte(s)
	tempMap := map[byte]int{
		'a': 1,
		'e': 1,
		'i': 1,
		'o': 1,
		'u': 1,
		'A': 1,
		'E': 1,
		'I': 1,
		'O': 1,
		'U': 1,
	}
	left, right := 0, len(arr)-1
	for left < right {
		_, exitL := tempMap[arr[left]]
		_, exitR := tempMap[arr[right]]
		if exitL && exitR { // 左右都是元音字母
			// 交换
			arr[left], arr[right] = arr[right], arr[left]
			left++
			right--
		} else if exitL && !exitR {
			right--
		} else if !exitL && exitR {
			left++
		} else {
			left++
			right--
		}
	}
	return string(arr)
}

// 解法二
func reverseVowels(s string) string {
	b := []byte(s)
	left, right := 0, len(b)-1
	for left < right {
		if !isVowels(b[left]){
			left ++
		}
		if !isVowels(b[right]) {
			right --
		}
		b[left], b[right] = b[right], b[left]
		left ++
		right --
	}
	return string(b)
}

func isVowels(ch byte) bool {
	switch ch {
	case 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U':
		return true
	default:
		return false
	}
}

func main() {
	fmt.Println(reverseVowels("leetcode"))
}
